#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QLineEdit>
#include "messageeditarea.h"
#include "messageshowarea.h"
#include "sessionfriendarea.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    static MainWidget* instance;
    //单例模式最关键的不是"创建实例" ,而是限制别人创建实例.
    MainWidget(QWidget *parent = nullptr);

public:
     static MainWidget* getInStance();

    ~MainWidget();

private:
    Ui::MainWidget *ui;


    enum ActiveTab
    {
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };
    ActiveTab activetab =SESSION_LIST;
    //窗口最左侧部分
    QWidget* windowLeft;


   //窗口中间部分
    QWidget* windowMid;

    //窗口最右侧部分
    QWidget* windowRight;

    //用户头像
    QPushButton* userAvatar;
    //会话标签按钮
    QPushButton* sessionTabBtn;
    //好友标签按钮
    QPushButton* friendTabBtn;
    //好友申请标签按钮
    QPushButton* applyTabBtn;
    //显示会话详情按钮
    QPushButton* extraBtn;

    //显示会话标题
    QLabel* sessionTitleLabel;

    //用户搜索框
    QLineEdit*  searchEdit;
    //添加好友按钮
    QPushButton*  addFriendBtn;
    SessionFriendArea* sessionFriendArea;
    //消息展示区
    MessageShowArea* messageShowArea;
    //消息编辑区
    MessageEditArea* messageEditArea;

public:
    void initMainWindow();
    void initLeftWindow();
    void initMidWindow();
    void initRightWindow();
    void initSignalSlot();
    void initWebSocket();
    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();
    void loadSessionList();
    void loadFriendList();
    void loadApplyList();
    void updateFriendList();
    void updateChatSessionList();
    void updateApplyList();
    void loadRecentMessage(const QString& chatSessionId);
    void updateRecentMessage(const QString& chatSessionId);

    //点击好友项切换到会话列表总的函数,上方的 switchTabToSession 只是其中一个环节
    void switchSession(const QString& userId);
    MessageShowArea* getMessageShowArea();
};
#endif // M AINWIDGET_H

